package client;

import static org.testng.AssertJUnit.assertTrue;

import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;

import javax.ejb.EJBException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import marionito.usecases.GestionJoueurs;

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class TestJoueurNG_marionito {
	private static GestionJoueurs gj;

	private String[] joueur1 = { "md", "mi", "Michel", "Debacker",
			"michel.debacker@ipl.be" };
	private String[] joueur2 = { "el", "em", "Emmeline", "Leconte",
			"emmeline.leconte@ipl.be" };
	private String[] joueur3 = { "oc", "ol", "Olivier", "Choquet",
			"olivier.choquet@ipl.be" };
	
	private String[] joueur4 = {"dd","","","",""};
	private String[] joueur5 = {"ss","ss","Steve","Stevens","ss.ss"};
	

	@BeforeClass
	public static void setUpBeforeClass() {
		try {
			Context jndi = new InitialContext();
			gj = (GestionJoueurs) jndi
					.lookup("ejb:marionitoEAR/marionitoEJB/GestionJoueursImpl!marionito.usecases.GestionJoueurs");
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}

	@Test
	public void test_inscription() {
		assertNotNull(gj.inscrireJoueur(joueur1[0], joueur1[1], joueur1[2],
				joueur1[3], joueur1[4]));
		assertNotNull(gj.inscrireJoueur(joueur2[0], joueur2[1], joueur2[2],
				joueur2[3], joueur2[4]));
		assertNotNull(gj.inscrireJoueur(joueur3[0], joueur3[1], joueur3[2], joueur3[3], joueur3[4]));
		
		assertNull(gj.inscrireJoueur(joueur1[0], joueur1[1], joueur1[2],
				joueur1[3], joueur1[4]));
		
		assertNull(gj.inscrireJoueur(joueur4[0], joueur4[1], joueur4[2], joueur4[3], joueur4[4]));
			
		assertNotNull(gj.inscrireJoueur(joueur5[0], joueur5[1], joueur5[2], joueur5[3], joueur5[4]));
		
		try{
			gj.inscrireJoueur("", "", "", "", "");
			assertTrue(false);
		}catch(EJBException e){
			assertTrue(true);
			setUpBeforeClass();
		}
		
		try{
			gj.inscrireJoueur("Login", "mdp", "Prenom", "Nom", "mauvaiseAdresseMail");
			assertTrue(false);
		}catch(EJBException e){
			assertTrue(true);
			setUpBeforeClass();
		}
	}
	
	@Test (dependsOnMethods="test_inscription") 
	public void test_Connexion(){
		assertNotNull(gj.seConnecter(joueur1[0], joueur1[1]));
		assertNotNull(gj.seConnecter(joueur2[0], joueur2[1]));
		assertNull(gj.seConnecter("MauvaisLogin", "mdp"));
		assertNull(gj.seConnecter(joueur1[0], "mauvais mdp"));
		assertNull(gj.seConnecter("", ""));
		assertNull(gj.seConnecter("joueur1[0]", ""));
		assertNull(gj.seConnecter("", "joueur2[1]"));
	}

}
